#!/usr/bin/env python3
"""
重新创建数据库表脚本
使用字符串字段类型
"""

import sys
import os
sys.path.append(os.path.dirname(os.path.abspath(__file__)))

from database.connection import DatabaseManager

def recreate_tables():
    """重新创建数据库表"""
    try:
        print("🔄 开始重新创建数据库表...")
        
        # 初始化数据库管理器
        db = DatabaseManager()
        if not db.initialize_pool():
            print("❌ 数据库连接失败")
            return False
        
        # 获取连接
        with db.get_connection() as conn:
            cursor = conn.cursor()
            
            # 删除现有表
            print("🗑️ 删除现有表...")
            cursor.execute("DROP TABLE IF EXISTS stock_data")
            cursor.execute("DROP TABLE IF EXISTS data_update_logs")
            conn.commit()
            print("✅ 现有表已删除")
            
            # 创建新的表结构（使用字符串字段）
            print("🏗️ 创建新表结构...")
            
            # 创建stock_data表
            create_stock_data_table = """
            CREATE TABLE IF NOT EXISTS `stock_data` (
              `id` BIGINT PRIMARY KEY AUTO_INCREMENT,
              `symbol` VARCHAR(20) NOT NULL COMMENT '股票代码，如 AAPL',
              `timestamp` DATETIME NOT NULL COMMENT '时间戳（API返回的timestamp字段）',
              `date` DATE GENERATED ALWAYS AS (DATE(timestamp)) STORED COMMENT '交易日期',
              
              -- 基础信息字段（来自API或手动设置）
              `name` VARCHAR(255) COMMENT '股票名称',
              `exchange` VARCHAR(50) DEFAULT 'NASDAQ' COMMENT '交易所',
              `sector` VARCHAR(100) DEFAULT 'Technology' COMMENT '行业',
              
              -- K线数据字段（完全对应API返回）- 全部使用字符串存储
              `open` VARCHAR(20) COMMENT '开盘价',
              `high` VARCHAR(20) COMMENT '最高价',
              `low` VARCHAR(20) COMMENT '最低价',
              `close` VARCHAR(20) COMMENT '收盘价',
              `volume` VARCHAR(20) COMMENT '成交量',
              `turnover` VARCHAR(30) COMMENT '成交额',
              
              -- 恐贪指标字段 - 全部使用字符串存储
              `fear_greed_index` VARCHAR(20) COMMENT '恐贪指数',
              `sentiment` VARCHAR(20) COMMENT '情绪状态',
              `investment_advice` VARCHAR(20) COMMENT '投资建议',
              
              -- 技术指标字段 - 全部使用字符串存储
              `rsi` VARCHAR(20) COMMENT 'RSI指标',
              `volatility` VARCHAR(20) COMMENT '波动率',
              `volume_ratio` VARCHAR(20) COMMENT '成交量比率',
              `momentum_score` VARCHAR(20) COMMENT '动量分数',
              `volatility_score` VARCHAR(20) COMMENT '波动率分数',
              `volume_score` VARCHAR(20) COMMENT '成交量分数',
              `put_call_score` VARCHAR(20) COMMENT '看跌看涨比率分数',
              
              -- 数据分类字段
              `data_type` ENUM('basic_info', 'kline', 'fear_greed', 'technical') DEFAULT 'kline' COMMENT '数据类型',
              `category` VARCHAR(20) DEFAULT 'regular' COMMENT '股票分类（leverage/regular/individual）',
              
              -- 系统字段
              `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
              `updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
              
              -- 索引设计
              UNIQUE KEY `uk_symbol_timestamp_type` (`symbol`, `timestamp`, `data_type`),
              INDEX `idx_symbol` (`symbol`),
              INDEX `idx_date` (`date`),
              INDEX `idx_symbol_date` (`symbol`, `date`),
              INDEX `idx_data_type` (`data_type`),
              INDEX `idx_category` (`category`),
              INDEX `idx_fear_greed_index` (`fear_greed_index`),
              INDEX `idx_symbol_date_desc` (`symbol`, `date` DESC)
            ) ENGINE=InnoDB COMMENT='股票数据综合表';
            """
            
            cursor.execute(create_stock_data_table)
            print("✅ stock_data表创建成功")
            
            # 创建data_update_logs表
            create_logs_table = """
            CREATE TABLE IF NOT EXISTS `data_update_logs` (
              `id` BIGINT AUTO_INCREMENT PRIMARY KEY,
              `symbol` VARCHAR(20) NOT NULL COMMENT '股票代码',
              `update_type` ENUM('basic_info', 'kline', 'fear_greed', 'technical') NOT NULL COMMENT '更新类型',
              `start_date` DATE COMMENT '更新开始日期',
              `end_date` DATE COMMENT '更新结束日期',
              `records_updated` INT DEFAULT 0 COMMENT '更新记录数',
              `status` ENUM('success', 'failed', 'partial') NOT NULL COMMENT '更新状态',
              `error_message` TEXT COMMENT '错误信息',
              `execution_time` DECIMAL(8, 3) COMMENT '执行时间（秒）',
              `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
              INDEX `idx_symbol` (`symbol`),
              INDEX `idx_update_type` (`update_type`),
              INDEX `idx_status` (`status`),
              INDEX `idx_created_at` (`created_at`)
            ) ENGINE=InnoDB COMMENT='数据更新日志表';
            """
            
            cursor.execute(create_logs_table)
            print("✅ data_update_logs表创建成功")
            
            # 插入默认股票分类数据
            insert_default_data = """
            INSERT IGNORE INTO stock_data (symbol, timestamp, name, exchange, sector, data_type, category) VALUES
            ('US.BOIL', NOW(), 'BOIL', 'NASDAQ', 'Energy', 'basic_info', 'leverage'),
            ('US.SOXL', NOW(), 'SOXL', 'NASDAQ', 'Technology', 'basic_info', 'leverage'),
            ('US.TQQQ', NOW(), 'TQQQ', 'NASDAQ', 'Technology', 'basic_info', 'leverage'),
            ('US.SPY', NOW(), 'SPY', 'NYSE', 'ETF', 'basic_info', 'regular'),
            ('US.QQQ', NOW(), 'QQQ', 'NASDAQ', 'ETF', 'basic_info', 'regular'),
            ('US.AAPL', NOW(), 'Apple Inc.', 'NASDAQ', 'Technology', 'basic_info', 'individual'),
            ('US.TSLA', NOW(), 'Tesla Inc.', 'NASDAQ', 'Automotive', 'basic_info', 'individual'),
            ('US.MSFT', NOW(), 'Microsoft Corp.', 'NASDAQ', 'Technology', 'basic_info', 'individual');
            """
            
            cursor.execute(insert_default_data)
            print("✅ 默认数据插入成功")
            
            conn.commit()
            cursor.close()
        
        print("🎉 数据库表重新创建完成！")
        return True
        
    except Exception as e:
        print(f"❌ 重新创建数据库表失败: {e}")
        return False

if __name__ == "__main__":
    success = recreate_tables()
    if success:
        print("✅ 数据库表重新创建成功")
    else:
        print("❌ 数据库表重新创建失败")
        sys.exit(1)
